fn main() -> Result<(), Box<dyn std::error::Error>> {

    // let mut prost_build = prost_build::Config::new();
    // prost_build.protoc_executable(protoc_bin_vendored::protoc_bin_path().unwrap());
    // prost_build.out_dir("src/protos") ;
    // prost_build.compile_protos(&["proto/helloworld/helloworld.proto"], &["proto/helloworld"],)?;

    // 在构建脚本的开头设置 PROTOC 环境变量，
    // 指向 `protoc-bin-vendored` 提供的 protoc.exe 路径。
    // 这是最可靠的方法，可以确保构建过程使用正确的 protoc。
    unsafe {
        std::env::set_var("PROTOC", protoc_bin_vendored::protoc_bin_path().unwrap());

    }

    tonic_prost_build::configure()
        .build_server(true)
        .compile_protos(
            &["proto/lab_distributed.proto"],
            &["proto"],
        )?;

    // // Use this in build.rs
    // protobuf_codegen::Codegen::new()
    //     // Use `protoc` parser, optional.
    //     .protoc()
    //     // Use `protoc-bin-vendored` bundled protoc command, optional.
    //     .protoc_path(&protoc_bin_vendored::protoc_bin_path().unwrap())
    //     // All inputs and imports from the inputs must reside in `includes` directories.
    //     .includes(&["proto/helloworld"])
    //     // Inputs must reside in some of include paths.
    //     // .input("src/protos/apple.proto")
    //     .input("proto/helloworld/helloworld.proto")  // 显式指定输入文件
    //     // .input("src/protos/banana.proto")
    //     // Specify output directory relative to Cargo output directory.
    //     .cargo_out_dir("src/protos")
    //     .run_from_script();

    Ok(())
}